package com.zxy.shaozhiyi1.main;

import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.By;
import org.openqa.selenium.By.ById;
import org.openqa.selenium.NoSuchElementException;
import org.testng.annotations.Test;

import aaa.HttpRequestUtil;
import net.sf.json.JSONArray;
import tree.TreeNode;
import tree.TreeNodeMerger;

public class ShaoZhiYi4
{
	// WEB驱动
	public WebDriver driver = null;
	// WEB元素
	public WebElement webelement = null;
	
	// excel工作簿
	private static HSSFWorkbook workbook = null;
		
	List<TreeNode> treeNodes;
	
	public List<TreeNode> getTreeNodes()
	{
		return null;
	}
	
	
	
	public boolean doesWebElementExist(WebDriver driver, By selector)
	{ 

	        try 
	        { 
	               driver.findElement(selector); 
	               return true; 
	        } 
	        catch (NoSuchElementException e) 
	        { 
	                return false; 
	        } 
	}
	
	
	
	@Test(invocationCount = 1)
	public void exportData() throws Exception
	{
		// 把前端树转为list
		treeNodes = this.convertTreeToList();
		
		// 从配置中拿到要导出的节点
		String daochujiedian = Constant.DAOCHUJIEDIAN;
		daochujiedian = "A01";
		
		// 从list中取到指定导出的节点
		TreeNode treeNode = null;
		for (TreeNode treeNodeTmp : treeNodes) {
			String id = treeNodeTmp.getId();
			if(daochujiedian.equals(id))
			{
				// 就是该节点
				treeNode = treeNodeTmp;
				
				// 退出
				break;
			}
		}
		
		if(null == treeNode)
		{
			// 没有找到要导出数据的节点
			
			System.err.println("没有找到要导出数据的节点，请检查配置");
			
			// 退出
			return;
		}
		
		// 判断有无children（是否是叶子节点）
		List<TreeNode> childRen = treeNode.getChildren();
		if(childRen.isEmpty())
		{
			// 是叶子节点
			// 给出提示，直接退出
			
			// 给出提示
			System.out.println("指定的A01是叶子节点，给定不正确，请检查配置");
			
			// 退出
			return;
		}
		
		// 非叶子节点的话（有children）
		
		
		for (TreeNode child : childRen)
		{
			// 循环遍历children
			// 得到一个child（TreeNode）
			
			// 判断该child是否是叶子节点（有无children）
			List<TreeNode> treeNodes = child.getChildren();
			if(treeNodes.isEmpty())
			{
				// 是叶子节点的话
				
				// 判断是否在检索页面，如果没在检索页面
				// 强制刷新 TODO:
				// 快速的方法是：拿页面指定元素是否存在做判断
				// <div class="caidan" id="title">项目综合查询</div>
				By selector = ById.id("title");
				boolean bl = this.doesWebElementExist(driver, selector);
				if(!bl)
				{
					// 不在检索页面
					
					// 强制刷新页面，到检索页面去
					driver.navigate().refresh();
				}
				
				// 节点ID给页面
				
				// 类别给页面
				
				// 年份给页面
				
				// 验证码输入识别，做成组件
				
				// 点击
				
				// 进入shaozhiyi3，保存excel（名字重新命名）
				
				
				// 继续循环遍历
			}
			else
			{
				// 不是叶子节点的话
				
				// 继续循环遍历
			}
		}
	}
	
	/**
	 * 把前端树转为list
	 * @return
	 */
	private List<TreeNode> convertTreeToList()
	{
		// 先把复杂的树放到内存中，以便后面持续操作
		String requestUrl = "https://isisn.nsfc.gov.cn/egrantindex/cpt/ajaxload-tree?locale=zh_CN&key=subject_code_index&cacheable=true&sqlParamVal=";
		String requestMethod = "GET";
		String outputStr = null;
		// JSONObject jsonObject = new HttpRequestUtil().httpRequest(requestUrl, requestMethod, outputStr);
		JSONArray jsonArray = new HttpRequestUtil().httpRequest(requestUrl, requestMethod, outputStr);
		System.out.println("执行完http请求后，拿到的json数组为：" + jsonArray);
		System.out.println(jsonArray.size());
		
		// jsonArray---->treenode的list
		List<TreeNode> treeNodes = JSONArray.toList(jsonArray, TreeNode.class);// 执行完后，treeNodes是一个list，里面没有填充children。
		System.out.println("把拿到的json数组转为指定结构TreeNode的list，里面没有填充children。 " + treeNodes);

		// 添加一个root到位置0
		TreeNode root = new TreeNode();
		root.setId("0");
		root.setName("根节点");
		root.setTitle("根节点");
		root.setPid("-1");
//		treeNodes.add(0, root);

		TreeNode treeNodeMerger = TreeNodeMerger.merge(treeNodes);// 执行完后，treeNodes还是一个list，但是里面的children已经填充完毕。
		System.out.println("执行完TreeNodeMerger.merge(treeNodes)后，treeNodes里面会自动填充好children。" + treeNodes);

		JSONArray jsonArray3 = JSONArray.fromObject(treeNodeMerger);
		System.out.println("1111111111111" + jsonArray3);
		
		return treeNodes;
	}
	
	/**
	 * 把前端类别转为list
	 */
	private void convertTypeToList()
	{
		
	}
	
	/**
	 * 把年份转为list
	 */
	private void convertYearToList()
	{
		
	}
}
